home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1995 August: Tool Chest / Dev.CD Aug 95 TC / Dev.CD Aug 95 TC.toast / Tool Chest / Interfaces / UniversalInterfaces 2.1B1 / CIncludes / SANE.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-04-18  |  5.5 KB  |  238 lines  |  [TEXT/MPS ]

  1. /*
  2.     File:        SANE.h
  3.  
  4.     Copyright:    © 1983-1994 by Apple Computer, Inc.
  5.                 All rights reserved.
  6.  
  7.     Version:    MPW 3.4a2 for E.T.O. #16
  8.     Created:    Thursday, December 15, 1994 8:49:08 PM
  9.  
  10. */
  11.  
  12. #ifndef __SANE__
  13. #define __SANE__
  14.  
  15. #if defined (powerc) || defined (__CFM68K__)
  16.  
  17. #error "The SANE.h header can only be used for code using the Classic 68K runtime model."
  18.  
  19. #else
  20.  
  21. #ifndef __TYPES__
  22. #include <Types.h>
  23. #endif
  24.  
  25. #ifndef __MATH__
  26. #include <Math.h>
  27. #endif
  28.  
  29. #ifdef mc68881
  30.  
  31. /* specific to the MC68881 SANE library */
  32.  
  33. #define INEXACT ((exception)(8))
  34. #define DIVBYZERO ((exception)(16))
  35. #define UNDERFLOW ((exception)(32))
  36. #define OVERFLOW ((exception)(64))
  37. #define INVALID ((exception)(128))
  38. #define CURINEX1 ((exception)(256))
  39. #define CURINEX2 ((exception)(512))
  40. #define CURDIVBYZERO ((exception)(1024))
  41. #define CURUNDERFLOW ((exception)(2048))
  42. #define CUROVERFLOW ((exception)(4096))
  43. #define CUROPERROR ((exception)(8192))
  44. #define CURSIGNAN ((exception)(16384))
  45. #define CURBSONUNOR ((exception)(32768))
  46.  
  47. #else
  48.  
  49. /* specific to the software SANE library */
  50.  
  51. #define INVALID ((exception)(1))
  52. #define UNDERFLOW ((exception)(2))
  53. #define OVERFLOW ((exception)(4))
  54. #define DIVBYZERO ((exception)(8))
  55. #define INEXACT ((exception)(16))
  56. #define IEEEDEFAULTENV ((environment)(0))    /*IEEE-default floating-point environment*/
  57.  
  58. #endif                                        /* mc68881 */
  59.  
  60. /* The common interface to the SANE library */
  61.  
  62. /* Decimal Representation Constants */
  63.  
  64. #define SIGDIGLEN 20                        /* significant decimal digits */
  65. #define DECSTROUTLEN 80                     /* max length for dec2str output */
  66.  
  67. /* Decimal Formatting Styles */
  68.  
  69. #define FLOATDECIMAL ((char)(0))
  70. #define FIXEDDECIMAL ((char)(1))
  71.  
  72. /* Ordering Relations */
  73.  
  74. #define GREATERTHAN ((relop)(0))
  75. #define LESSTHAN ((relop)(1))
  76. #define EQUALTO ((relop)(2))
  77. #define UNORDERED ((relop)(3))
  78.  
  79. /* Inquiry Classes */
  80.  
  81. #define SNAN ((numclass)(0))
  82. #define QNAN ((numclass)(1))
  83. #define INFINITE ((numclass)(2))
  84. #define ZERONUM ((numclass)(3))
  85. #define NORMALNUM ((numclass)(4))
  86. #define DENORMALNUM ((numclass)(5))
  87.  
  88. /* Rounding Directions */
  89.  
  90. #define TONEAREST ((rounddir)(0))
  91. #define UPWARD ((rounddir)(1))
  92. #define DOWNWARD ((rounddir)(2))
  93. #define TOWARDZERO ((rounddir)(3))
  94.  
  95. /* Rounding Precisions */
  96.  
  97. #define EXTPRECISION ((roundpre)(0))
  98. #define DBLPRECISION ((roundpre)(1))
  99. #define FLOATPRECISION ((roundpre)(2))
  100.  
  101. #ifdef mc68881
  102.  
  103. typedef long exception;
  104.  
  105. struct environment {
  106.     long FPCR;
  107.     long FPSR;
  108. };
  109.  
  110. typedef struct environment environment;
  111.  
  112. extern environment IEEEDEFAULTENV;
  113.  
  114. struct trapvector {
  115.     void (*unordered)();
  116.     void (*inexact)();
  117.     void (*divbyzero)();
  118.     void (*underflow)();
  119.     void (*operror)();
  120.     void (*overflow)();
  121.     void (*signan)();
  122. };
  123.  
  124. typedef struct trapvector trapvector;
  125. #else
  126.  
  127. typedef short exception;
  128. typedef short environment;
  129. /* typedef struct {short w[6];} extended96;    -- Now defined in Types.h */
  130.  
  131. struct mischaltinfo {
  132.     unsigned short haltexceptions;
  133.     unsigned short pendingCCR;
  134.     long pendingD0;
  135. };
  136.  
  137. typedef struct mischaltinfo mischaltinfo;
  138. typedef pascal void (*haltvector)(mischaltinfo *misc, void *src2, void *src, void *dst, short opcode);
  139. #endif
  140.  
  141. typedef short relop;                        /* relational operator */
  142. typedef short numclass;                     /* inquiry class */
  143. typedef short rounddir;                     /* rounding direction */
  144. typedef short roundpre;                     /* rounding precision */
  145.  
  146. struct decimal {
  147.     char sgn;                                /*sign 0 for +, 1 for -*/
  148.     char unused;
  149.     short exp;                                /*decimal exponent*/
  150.     struct{
  151.         unsigned char length;
  152.         unsigned char text[SIGDIGLEN];        /*significant digits */
  153.         unsigned char unused;
  154.         }sig;
  155. };
  156.  
  157. typedef struct decimal decimal;
  158. struct decform {
  159.     char style;                             /*FLOATDECIMAL or FIXEDDECIMAL*/
  160.     char unused;
  161.     short digits;
  162. };
  163.  
  164. typedef struct decform decform;
  165. #ifdef __cplusplus
  166. extern "C" {
  167. #endif
  168.  
  169. #ifdef mc68881
  170.  
  171. struct trapvector gettrapvector(void);
  172. void settrapvector(const trapvector *v);
  173. void x96tox80(const extended *x,extended80 *x80);
  174. void x80tox96(const extended80 *x80,extended *x);
  175.  
  176. #else
  177.  
  178. haltvector gethaltvector(void); 
  179. void sethaltvector(haltvector v);
  180. void x96tox80(const extended96 *x96,extended *x);
  181. void x80tox96(const extended *x,extended96 *x96);
  182.  
  183. #endif
  184.  
  185. void num2dec(const decform *f,extended x,decimal *d);
  186. extended dec2num(const decimal *d); 
  187. void dec2str(const decform *f,const decimal *d,char *s);
  188. void str2dec(const char *s,short *ix,decimal *d,short *vp); 
  189. extended remainder(extended x,extended y,short *quo);
  190. extended rint(extended x);
  191. extended scalb(short n,extended x); 
  192. extended logb(extended x);
  193. extended copysign(extended x,extended y);
  194. extended nextfloat(extended x,extended y);
  195. extended nextdouble(extended x,extended y); 
  196. extended nextextended(extended x,extended y);
  197. extended log2(extended x);
  198. extended log1(extended x);
  199. extended exp2(extended x);
  200. extended exp1(extended x);
  201.  
  202. #define power(x,y) pow(x,y)
  203.  
  204. extended ipower(extended x,short i);
  205. extended compound(extended r,extended n);
  206. extended annuity(extended r,extended n);
  207. extended randomx(extended *x);
  208. numclass classfloat(extended x);
  209. numclass classdouble(extended x);
  210. numclass classcomp(extended x); 
  211. numclass classextended(extended x); 
  212. long signnum(extended x);
  213. void setexception(exception e,long s);
  214. long testexception(exception e);
  215. void sethalt(exception e,long s);
  216. long testhalt(exception e); 
  217. void setround(rounddir r);
  218. rounddir getround(void);
  219. void setprecision(roundpre p);
  220. roundpre getprecision(void);
  221. void setenvironment(environment e); 
  222. void getenvironment(environment *e);
  223. void procentry(environment *e); 
  224. void procexit(environment e);
  225. relop relation(extended x,extended y);
  226. extended nan(unsigned char c);
  227.  
  228. #define inf() __inf()
  229.  
  230. extended pi(void);
  231. #ifdef __cplusplus
  232. }
  233. #endif
  234.  
  235. #endif
  236.  
  237. #endif
  238.